home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_87 / iff.pas < prev    next >
Pascal/Delphi Source File  |  1995-01-01  |  1KB  |  89 lines

  1. UNIT IFF;
  2.  
  3. INTERFACE
  4.  
  5. USES Objects;
  6.  
  7.  
  8.  
  9.  
  10. TYPE
  11.   TIffBlockIdent = STRING[4];
  12.  
  13.   PIffFile = ^TIffFile;
  14.   TIffFile =
  15.     OBJECT(TObject)
  16.       CONSTRUCTOR Init;
  17.       DESTRUCTOR  Done; VIRTUAL;
  18.  
  19.       PROCEDURE Parse  (VAR St: TStream);                             VIRTUAL;
  20.       FUNCTION  DoBlock(VAR St: TStream;
  21.                         Id: TIffBlockIdent; Size: LONGINT) : BOOLEAN; VIRTUAL;
  22.     END;
  23.  
  24.  
  25.  
  26.  
  27. IMPLEMENTATION
  28.  
  29.  
  30.  
  31.  
  32. CONSTRUCTOR TIffFile.Init;
  33.   BEGIN
  34.     TObject.Init;
  35.   END;
  36.  
  37.  
  38. DESTRUCTOR TIffFile.Done;
  39.   BEGIN
  40.     TObject.Done;
  41.   END;
  42.  
  43.  
  44. FUNCTION SwapLong(l: LONGINT) : LONGINT;
  45.   VAR
  46.     w : ARRAY[0..1] OF WORD ABSOLUTE l;
  47.     r : WORD;
  48.   BEGIN
  49.     r    := SWAP(w[0]);
  50.     w[0] := SWAP(w[1]);
  51.     w[1] := r;
  52.     SwapLong := l;
  53.   END;
  54.  
  55.  
  56. PROCEDURE TIffFile.Parse(VAR St: TStream);
  57.   VAR
  58.     Id   : TIffBlockIdent;
  59.     l    : LONGINT;
  60.     Size : LONGINT;
  61.   BEGIN
  62.     Id[0] := #4;
  63.  
  64.     REPEAT
  65.       l := St.GetSize - St.GetPos;
  66.       IF l < 8 THEN EXIT;
  67.       St.Read(Id[1], 4);
  68.       St.Read(Size,  4);
  69.  
  70.       Size := SwapLong(Size);
  71.  
  72.       l := St.GetSize - St.GetPos;
  73.       IF l < Size THEN EXIT;
  74.       l := St.GetPos + Size;
  75.       IF NOT DoBlock(St, Id, Size) THEN EXIT;
  76.       St.Seek(l);
  77.     UNTIL FALSE;
  78.   END;
  79.  
  80.  
  81. FUNCTION TIffFile.DoBlock(VAR St: TStream; Id: TIffBlockIdent; Size: LONGINT) : BOOLEAN;
  82.   BEGIN
  83.     DoBlock := FALSE;
  84.   END;
  85.  
  86.  
  87.  
  88.  
  89. END.